// app.js
const api = require('./utils/api');
const toast = require('./utils/toast');

App({
  onLaunch() {
    console.log('[App] 小程序启动');
    // 获取系统信息
    const systemInfo = wx.getSystemInfoSync();
    this.globalData.systemInfo = systemInfo;
    
    // 同步检查本地存储，快速恢复登录状态
    const openId = wx.getStorageSync('openId');
    console.log('[App] 启动时从缓存读取到的openId:', openId ? `"${openId}"` : '未找到');
    if (openId) {
      this.globalData.isLoggedIn = true;
      const userInfo = wx.getStorageSync('userInfo');
      if (userInfo) {
        this.globalData.userInfo = userInfo;
      }
      console.log('[App] 根据openId，快速恢复登录状态为 true');
    } else {
      console.log('[App] 无openId，初始化登录状态为 false');
    }
    
    // 判断是否需要自动更新
    this.checkUpdate();
    
    // 在后台异步验证凭证有效性
    this.autoLogin();
  },
  
  // 登录回调，目前由profile页面使用
  loginCallback: null,
  
  // 检查小程序是否有更新
  checkUpdate() {
    if (wx.canIUse('getUpdateManager')) {
      const updateManager = wx.getUpdateManager();
      updateManager.onCheckForUpdate(res => {
        if (res.hasUpdate) {
          updateManager.onUpdateReady(() => {
            wx.showModal({
              title: '更新提示',
              content: '新版本已经准备好，是否重启应用？',
              success: (res) => {
                if (res.confirm) {
                  updateManager.applyUpdate();
                }
              }
            });
          });
          
          updateManager.onUpdateFailed(() => {
            wx.showModal({
              title: '更新提示',
              content: '新版本下载失败，请检查网络后重试',
              showCancel: false
            });
          });
        }
      });
    }
  },
  
  // 自动登录
  autoLogin() {
    // 异步后台验证，不影响启动时的同步状态
    const openId = wx.getStorageSync('openId');
    if (openId) {
       // 验证凭证有效性 - [暂时禁用] 后端修复/user/info接口前先不验证
       // this.checkTokenValid();
       console.log('[App] 检测到openId，自动登录验证已暂时禁用，默认凭证有效');
    }
  },
  
  // 检查凭证有效性
  checkTokenValid() {
    api.user.getUserInfo()
      .then(res => {
        // 凭证有效，更新全局用户信息
        this.globalData.userInfo = res;
        this.globalData.isLoggedIn = true;
        if (this.loginCallback) {
          this.loginCallback(true);
        }
      })
      .catch(err => {
        console.log('凭证(openId)已失效', err);
        // 凭证无效，清除本地存储的凭证
        wx.removeStorageSync('openId');
        this.globalData.isLoggedIn = false;
        if (this.loginCallback) {
          this.loginCallback(false);
        }
      });
  },
  
  // 执行微信登录
  doLogin() {
    return new Promise((resolve, reject) => {
      wx.login({
        success: res => {
          if (res.code) {
            // 获取用户信息
            const userInfo = wx.getStorageSync('userInfo') || {};
            
            // 发送 res.code 到后台换取 openId, token等信息
            api.user.wxLogin({
              code: res.code,
              avatarUrl: userInfo.avatarUrl,
              nickName: userInfo.nickName || ''
            })
            .then(result => {
              // 存储token
              wx.setStorageSync('token', result.token);
              
              // 存储用户信息
              if (result.userInfo) {
                const defaultAvatar = '/assets/images/wxlogo.png';
                wx.setStorageSync('userInfo', {
                  ...userInfo,
                  ...result.userInfo,
                  avatarUrl: result.userInfo.avatarUrl || defaultAvatar
                });
                this.globalData.userInfo = {
                  ...result.userInfo,
                  avatarUrl: result.userInfo.avatarUrl || defaultAvatar
                };
              }
              
              this.globalData.isLoggedIn = true;
              if (this.loginCallback) {
                this.loginCallback(true);
              }
              
              resolve(result);
            })
            .catch(err => {
              console.error('登录失败', err);
              this.globalData.isLoggedIn = false;
              if (this.loginCallback) {
                this.loginCallback(false);
              }
              reject(err);
            });
          } else {
            console.log('获取code失败', res);
            reject(new Error('获取code失败'));
          }
        },
        fail: err => {
          console.log('wx.login调用失败', err);
          reject(err);
        }
      });
    });
  },
  
  globalData: {
    userInfo: null,
    systemInfo: null,
    isLoggedIn: false,
    showLoginModal: false,
    pendingSignature: false, // 标记用户是否希望在登录后进入签名模式
    // 其他全局数据
  }
})
